<?php
/**
 * Controller_Order
*
* Класс Controller_Order отвечает за обработку заказов
*
*/
class Controller_Order extends Controller_Base {
	/**
	 * Выбор действия по URL
	 *
	 */
	public function action() {
		Service_Debug::setDebug();
		$objSession = User_Session::instance();
		switch ($this->arrRequest[1]) {
			case '': case 'list': // Страница всех заказов - только для админов
				if(SimpleAdministration::isAdmin()) $this->actionList();
				else throw new Exception_SiteError('', 403);
			  break;
			case 'add':
				 $this->actionAdd();
				break;
			case 'edit':
				if (!is_numeric($this->arrRequest[2]) || !SimpleAdministration::isAdmin()) throw new Exception_SiteError('', 404);
				else { 
					$objOrder= new Order($this->arrRequest[2]);
					if ($objOrder->id) $this->actionEdit($objOrder);
					else throw new Exception_SiteError('', 404);
				}
				break;
			default:
				if (!is_numeric($this->arrRequest[1])) throw new Exception_SiteError('', 404);
				else { 
						$objOrder = new Order($this->arrRequest[1]);
						if ($objOrder->id && SimpleAdministration::isAdmin()) $this->actionOne($objOrder);
						else throw new Exception_SiteError('', 404);
				}
				break;
		}
	}


	/**
	 * Выводит список существующих заказов
	 *
	 */
	public function actionList() {
		Service_Debug::setDebug();
		$objOrder = new Order();

		if(isset($_GET['option']) && $_GET['option'] == 'fast') $ordersArray = $objOrder->find('all',array('select' => '`order`.`ID_order`,`order`.`ID_driver`,`order`.`ID_user`,`order`.`description`,`order`.`is_fast_order`,`order`.`call_to_client`,`order`.`created_at`,`c_from`.`city_name` AS `from`,`c_to`.`city_name` AS `to`','joins' => 'INNER JOIN `city` `c_from` ON (`c_from`.`ID_city`=`order`.`city_from`) INNER JOIN `city` `c_to` ON (`c_to`.`ID_city`=`order`.`city_to`)', 'conditions' => '`order`.`is_fast_order`="1"', 'order' => '`order`.`call_to_client`,`order`.`created_at` DESC'));
		else $ordersArray = $objOrder->find('all', array('select' => '`order`.`ID_order`,`order`.`ID_driver`,`order`.`ID_user`,`order`.`description`,`order`.`is_fast_order`,`order`.`created_at`,`c_from`.`city_name` AS `from`,`c_to`.`city_name` AS `to`','joins' => 'INNER JOIN `city` `c_from` ON (`c_from`.`ID_city`=`order`.`city_from`) INNER JOIN `city` `c_to` ON (`c_to`.`ID_city`=`order`.`city_to`)', 'conditions' => '`order`.`is_fast_order`="0"', 'order' => '`order`.`created_at` DESC'));
		
		$this->title = 'Ваши заказы';
		$this->bodyAttrs = 'class="order-list"';

		$objViewOrder = new View_Order();
		$this->showHeader();
		$objViewOrder->showAdminList($ordersArray);
		$this->showFooter();
		
	}
	
	/**
	* Выводит страницу заказа
	*
	*/
	public function actionOne(Order $objOrder) {
		Service_Debug::setDebug();

		// Заменяем id городов на их названия
		$objCity = new City();
		$objOrder->setField('city_from_name', $objCity->getNameById($objOrder->getField('city_from')));
		$objOrder->setField('city_to_name', $objCity->getNameById($objOrder->getField('city_to')));
		
		// Если есть пост с перепиской и пользователь - не водитель
		if(isset($_FILES['comment-attach']) && isset($_POST['OrderComment']) && SimpleAdministration::isAuthorOrAdmin($objOrder->getField('ID_user'))) {
			$objOrderComment = new OrderComment($_POST['OrderComment']);
			if($objOrderComment->save()) { // Если коммент сохранился, то пробуем прикрепить к нему аттач
				if($objOrderComment->saveAttach()) unset($_POST['OrderComment']);
			}
		}
		
		$this->title = $objOrder->getField('city_from_name') . ' - ' . $objOrder->getField('city_to_name');
		$this->bodyAttrs = 'class="order-page"';
		$objViewOrder = new View_Order();
		
		$this->showHeader();
		$objViewOrder->showOrderPage($objOrder);
		$this->showFooter();
	}
	
	/**
	 * Страница добавления заказов
	 * 
	 */
	public function actionAdd() {
		Service_Debug::setDebug();
	    if (isset($_POST['Order'])) {
			$objOrder = new Order($_POST['Order']);
			if ($objOrder->save()) {
				if(SimpleAdministration::isAdmin()) User_Session::moveTo(W_ABSPATH . 'orders/' . $objOrder->id , 'Заказ успешно добавлен', 1);
				else User_Session::moveTo(W_ABSPATH . 'profile/orders/' . $objOrder->id , 'Заказ успешно добавлен', 1);
			}
		}
		else $objOrder = new Order();
		
		$this->showLeftColumn = false;
	  	$this->title = 'Добавление груза';
	  	$this->bodyAttrs = 'class="order-add"';
	  	$objViewOrder = new View_Order();

	  	$this->showHeader();
	    $objViewOrder->showAddForm($objOrder, 'add');
		$this->showFooter();
	}

	/**
	 * Страница редактирования заказов
	 * 
	 * @param $objOrder - объект заказа для редактирования
	 */
	public function actionEdit($objOrder) {
		Service_Debug::setDebug();
		if (isset($_POST['Order'])) {
			$objOrder = new Order($_POST['Order']);
			if ($objOrder->save()) User_Session::moveTo(W_ABSPATH . 'orders/' . $objOrder->id , 'Заказ успешно отредактирован', 1);
		}

		$this->showLeftColumn = false;
		$this->title = 'Редактирование заказа';
		$this->bodyAttrs = 'class="order-edit"';
		$objViewOrder = new View_Order();
	
		$this->showHeader();

		$objViewOrder->showAddForm($objOrder, 'edit');
		$this->showFooter();
	}
}
?>